//
//  HMLoginViewController.swift
//  HMWeiBo
//
//  Created by Apple on 16/7/29.
//  Copyright © 2016年 itheima. All rights reserved.
//

import UIKit
import SVProgressHUD


//MARK:--  1.我们的app去显示那个web页面
class HMLoginViewController: UIViewController ,UIWebViewDelegate{

    let webView = UIWebView()
    
    override func loadView() {
        view = webView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        view.backgroundColor = UIColor.whiteColor()
        
        setupNav()
        
        // 设置页面的网络请求
        // 1. 网址
        let url = "https://api.weibo.com/oauth2/authorize?client_id=\(AppKey)&redirect_uri=\(RedrectURL)"
        // 2. 创建请求
        
        let request = NSURLRequest(URL: NSURL(string: url)!)
        
        // 3. 网页加载
        webView.loadRequest(request)
        
        // 4. 设置代理
        webView.delegate = self
    }
    
    private func setupNav(){
        
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", style: UIBarButtonItemStyle.Plain, target: self, action: "dissmiss")
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: UIBarButtonItemStyle.Plain, target: self, action: "auto")
        
    }

    //MARK:-- 按钮的点击
    
    //
    @objc private func dissmiss(){
        
        dismissViewControllerAnimated(false) { () -> Void in
            
        }
    }
    
    @objc private func auto(){
        // " 双引号和系统的 冲突;可以改成 单引号;也可以转义
        // document.getElementById('userId') 能够找到我们对应的控件
        
        let js = "document.getElementById('userId').value = 'itcast123456@hotmail.com';document.getElementById('passwd').value = 'itcast123456'"
        
        webView.stringByEvaluatingJavaScriptFromString(js)
        
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    


}


//MARK:-- WebView的代理方法
//MARK:-- 2.我们需要获取到这个含有code的url,去截取code
extension HMLoginViewController{
    
    // 这个方法是只要有网络请求,都会走这个方法,
    // 如果返回 true,则web页面加载这个网址
    // 如果返回false,则不加载页面
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
//        printLog(request.URL)
        
        // 我们判断一下网站 和我们设置的回调网站 含有
        // 我们可以用字符串 的hasPrefix 来判断
        // absoluteString是url的绝对路径
        
        // 1. 对url字符串进行可选判断
        if let urlString = request.URL?.absoluteString {
        
            //2. 判断字符串的前缀
            if urlString.hasPrefix(RedrectURL){
                
                printLog(urlString)
                // http://www.itheima.cn/?code=5318fe3ec3a9d111010055786b2e9f24
                // 3. 对字符串进行一个截取,来获取code
                // 介绍一个新的知识
                /*
                    For example, in the URL http://www.example.com/index.php?key1=value1&key2=value2, the query string is key1=value1&key2=value2.
                */
                // code 是什么类型? let code: String?
                // code=5318fe3ec3a9d111010055786b2e9f24
                if let code = request.URL?.query {
                
                    // 4. 对 code=5318fe3ec3a9d111010055786b2e9f24 进行截取
                    // String -- 你若安好,便是晴天
                    // 1. OC
                    // 2. Swift
//                    let startIndex = "哈哈哈".endIndex
                    let subStr = code.substringFromIndex("code=".endIndex)
                    // 5b2cfcc49d9be89923525e533dfb3211
                    printLog(subStr)
                    
                    // 5. 拿code去换取token
//                    loadToken(subStr)
                    // 为什么要进行闭包的抽取
                    // 1. 统一我们的方法处理
                    // 2. 我们会进行MVVM的抽取
                   
                    // MARK:--MVVM 在控制器里,创建了一个ViewModel的实例对象
                    //
                    HMLoginViewModel.shareInstance.loadToken(subStr, success: { () -> () in
                        // 成功的处理
                        printLog("最终的回调")
                        
                        // 视图控制器的切换
                        // 为了区分是谁发的通知,我们可以把 object 添加一个值
                        NSNotificationCenter.defaultCenter().postNotificationName(kNotificationChangeViewController, object: self)
                        
                        // 这样可以 
//                        UIApplication.sharedApplication().delegate?.window =
                        
                        // 页面消失
                        self.dissmiss()
                        
                        }, failed: { (message) -> () in
                            //失败的处理
                            SVProgressHUD.showErrorWithStatus("加载失败了!!!")
                    })
                    
                    // 这里返回一个false,没有必要让用户看到我们的回调页面
                    // 回调页面只是作为一个调试的作用
                    return false
                    
                }
            }
            
        }
               return true
    }
    
    
}

//MARK:-- 3.拿code去发送一个网络请求,去换取token
extension HMLoginViewController{

   
    
}

//MARK:-- 4. 我们来测试一下Token,通过token来获取一下个人的信息
// 这个个人信息会用于我们后期的欢迎界面

extension HMLoginViewController{

   
    
}
